function MasqueZones (suffFond,argtZonesCtrlees,oCiuLie,modeMasque) {
//======================================================

var masque;
  this.creeMasque = CreeVoileHtml;

  // pas de zones ? masquer sp?cifi?es
  if (!argtZonesCtrlees) 
    argtZonesCtrlees = window.document.body;

    //-- tableau d?signant les diff?rentes zones Html ? contr?ler
    var emprise = new Array;
    // une seule zone control?e
    if (! (argtZonesCtrlees instanceof Array)) 
        emprise[0] = argtZonesCtrlees;
    // plusieurs zones control?es
    else
        emprise = argtZonesCtrlees;
    
    // traitement de la 1?re zone qui a un statut particulier
    // si une fenetre modale est associ?e au contr?le elle aura cette zone comme parent
    
    //-- mode de masquage strict -> pas de partage du voile avec autre contr?le
    // le masque figure au m?me niveau (zIndex 10000) que d'autres ?ventuellt d?ja pr?sent
    // mais se retrouve au premier plan du fait de sa nouveaut?
    if (modeMasque == 'strict') {
		traceExec('create mask mode "strict"',1);
        masque = rialto.session? (rialto.session.masque?rialto.session.masque : null)
                           : null;
        if (   (!masque)
            || (masque.style.display == 'block')){
            traceExec('no mask exist or hidden mode --> create new mask',1);
            masque = this.creeMasque(suffFond,withoutStopEvent=true);
            
            
        }
        else { // r?cup?ration d'1 masque inutilis?
        	traceExec('already a mask',1);
                    masque.className = 'ecranMasque' + suffFond; //'Gris'||'transparent';
                    masque.style.display = 'block';
            
		}
        emprise[0].appendChild(masque);                
    
    }
    else {
		traceExec('create mask mode "no strict"',1);
        masque = this.creeMasque(suffFond);

        masque.style.width = emprise[0].offsetWidth;    //document.body.scrollWidth;
        masque.style.height = emprise[0].offsetHeight;  //document.body.scrollHeight;
        emprise[0].appendChild(masque);                
    }

	if (typeof masque.espaceReqLie == "undefined")
		masque.espaceReqLiee = new Array;
//    masque.espaceReqLiee[oCiuLie.sourceReq] = oCiuLie;
    masque.espaceReqLiee.push(oCiuLie);

	traceExec('mask / area 0 created',1);
	
    for (var e=1; e < emprise.length; e++) {
	traceExec('mask / area '+e,1);
        // zone d?ja control?e (ou avec masque passif (masqu?)): r?cup du masque (et activation)
        if  (   (emprise[e].firstChild)
            && (emprise[e].lastChild.className)
            && (emprise[e].lastChild.className.indexOf('ecranMasque') != -1)) {
                wMasque = emprise[e].lastChild;
                //-- masque non activ? -> activation
                if (wMasque.style.display == 'none') {
//alert('masque non activ?; n? masque = '+wMasque.id);
                    masque = wMasque;
                    masque.className = 'ecranMasque' + suffFond; //'Gris'||'transparent';
                    masque.style.display = 'block';
                }
                //-- masque actif et un elt inscrit ds le masque -> d?ja 1 popup avec m?me emprise
                else
                if (wMasque.firstChild) {
alert('masque activ? avec popup inscrit dedans n? masque= '+wMasque.id);
                    while  (   (wMasque.firstChild)
                            && (wMasque.lastChild.className)
                            && (wMasque.lastChild.className.indexOf('ecranMasque') != -1)) {
                            wMasque = wMasque.lastChild;
//alert('recherche masque superficiel');
                    }
                    masque = this.creeMasque(suffFond);
//alert('nv masque cr?? n? = '+masque.id+' ajout? ds masque n?= '+wMasque.id);
                    wMasque.appendChild(masque);                
                }
                //-- masque actif mais pas d' elt inscrit ds le masque
                else {
//alert('masque activ? vide');
                     masque = wMasque;
                }
        }
        // 1er contr?le  sur la zone : cr?ation du masque
        else {
                masque = this.creeMasque(suffFond);
//alert('init nv masque cr?? n? = '+masque.id);
                emprise[e].appendChild(masque);                
        }
//        masque.espaceReqLiee[oCiuLie.sourceReq] = oCiuLie;
        masque.espaceReqLiee.push(oCiuLie);

    }

    masque = emprise[0].lastChild;  // la fenetre est plac?e / la 1ere zone masquee
//  }
  
  return masque;
}


function CreeVoileHtml (suffFond,withoutStopEvent) {
//===============================
// methode privee
  // cr?ation du container masquant partiellement les autres elements

traceExec('CreeVoileHtml withoutStopEvent= '+withoutStopEvent,1);
  var masque = document.createElement('DIV');
  //var suffFond = suffFond || 'transparent';
  masque.className = 'ecranMasque'+suffFond; //'Gris'||'transparent';
  masque.style.width =  '100%';	//document.body.scrollWidth;
  masque.style.height = '100%';	//document.body.scrollHeight;
  //masque.style.width =  document.body.clientWidth;
  //masque.style.height = document.body.clientHeight;
  masque.style.zIndex = 10000;  
  masque.espaceReqLiee = new Array;

  masque.id = CreeVoileHtml.prototype.nbInstances++;
  
//  masque.onmousedown = function (e) {
  masque.onclick = function (e) {

        // pour ts les ?lts dont une des fonctions de controle d integrit? est assur?e par ce masque ci
        for (var i=0; i < this.espaceReqLiee.length; i++) {

            // r?cup d un espace de requ?te unique li? au masque = objet fenCtrlReq
            oCiuLie = this.espaceReqLiee[i];
            // callback pour 1 signal sp?cifique
            if (oCiuLie  && oCiuLie.infoAccesInterdit)
                oCiuLie.infoAccesInterdit();
            // signal standart s'il y a 1 fen?tre correspondante
            else {
                if (oCiuLie  && oCiuLie.fen) {
                    oCiuLie.fen.chgEtat('inactive');
                    // this.time=
                    setTimeout( "rialto.session.objects.singletonCDs[\""+oCiuLie.sourceReq+"\"].fen.chgEtat('active')",500);
                }
            }
        }       

        
        //test fl / pb popup 
        if (!withoutStopEvent) {
        	traceExec('masque.onclick with StopEvent',1);
        	stopEvent(e);
        }
        else
        	traceExec('masque.onclick withoutStopEvent',1);
  }

  masque.suppRef = function (ref) {
    for (var i=0; i < this.espaceReqLiee.length; i++) {
        if (this.espaceReqLiee[i] == ref) {
            this.espaceReqLiee.splice(i,1);
            break;
        }
    }
    return this.espaceReqLiee.length;  // retourne le nb de ref restant attach?es ? ce masque
  }
  return masque
}
CreeVoileHtml.prototype.nbInstances = 0;